package com.scott.crm.user.service.impl;

import com.scott.crm.user.bean.UserBean;
import com.scott.crm.user.dao.UserDao;
import com.scott.crm.user.service.UserService;
import com.scott.crm.user.utils.UserUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 黄后林
 * @version 1.0
 * @note
 * @date 2021-11-27 12:52:02
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao dao;


    /**
     * 方法描述: 登陆
     * @author: 黄后林
     * @date: 2021/11/27 13:31
     * @param user
     * @return int
     */
    @Override
    public UserBean login(UserBean user)  {

        // 将拿到的密码加密
        user.setPassword(UserUtils.md5(user));

        List<UserBean> userList = dao.login(user);

        // 根据账号密码查找userId
        Integer userId = dao.findUserIdByUserBean(user);

        // 根据userId查找roleId
        UserBean userAndRole = dao.findRoleIdByUserId(userId);

        // 如果userList不等于空 并且 userList有记录
        if(!CollectionUtils.isEmpty(userList) && userList.size()==1){
            //说明查到了1条数据
            UserBean userBean = userList.get(0);
            if(userBean!=null  && userAndRole != null){
                return userBean;
            }else if(userAndRole == null){
                userBean.setId(1);
                return userBean;
            }
        }
        return null;

    }

    /**
     * 方法描述:修改密码
     * @author: 周海燕
     * @date: 2021/11/30 23:05 [user]
     */
    @Override
    public Integer updatePassword(UserBean user) {

        // 判断密码是否符合正则表达要求条件
        boolean qualifiedPassword = UserUtils.isQualifiedPassword(user.getPassword());

        if(qualifiedPassword == true){

            user.setPassword(UserUtils.md5(user));
            return dao.updateByPrimaryKeySelective(user);
        }
        return null;
    }

    /**
     * 方法描述:通过userId查找userName，roleName
     * @author: 周海燕
     * @date: 2021/11/30 23:05 [userBean]
     */
    @Override
    public UserBean loginLoading(UserBean userBean) {

        // 只有增删改可以返回影响行数
        // 想看到查询的数量只能用list来装
        List<UserBean> userList = dao.loginLoading(userBean);

        // 防止一个用户多个角色
        // !CollectionUtils.isEmpty(userList)     如果集合list不等于空
        if(!CollectionUtils.isEmpty(userList) && userList.size()==1){
            UserBean user = userList.get(0);

            if(user != null){
                return user;
            }
        }
        return null;
    }

    /**
     * 方法描述:用户注册
     * @author: 周海燕
     * @date: 2021/12/1 16:18 [userBean]
     */
    @Override
    public Integer register(UserBean userBean) {

        // 判断手机号码是否符合正则表达要求条件
        boolean qualifiedPhone = UserUtils.isPhone(userBean.getPhone());

        // 判断密码是否符合正则表达要求条件
        boolean qualifiedPassword = UserUtils.isQualifiedPassword(userBean.getPassword());

        // 如果手机号码就密码都符合要求
        if (qualifiedPhone == true && qualifiedPassword == true){

            // 通过phone查找userId
            Integer userId = dao.findUserIdByUserBean(userBean);

            // 如果表中查不到对应的userId
            if(userId == null){

                // 将拿到的密码加密
                userBean.setPassword(UserUtils.md5(userBean));

                // 就将该账户插增加至表中
                return dao.insert(userBean);
            }
        }
        return 0;
    }
}
